package com.auntvt.timo.jpax.springbootstarter.service;

import com.auntvt.timo.jpax.core.service.ChainQuickService;
import com.auntvt.timo.jpax.core.service.JpaService;
import com.auntvt.timo.jpax.core.service.QuickService;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * Service基类接口
 *
 * @author 小懒虫 <auntvt@163.com>
 * @date 2021/5/25
 */
public interface JpaxService<T, ID> extends JpaService<T, ID>, QuickService<T>, ChainQuickService<T> {

    /**
     * 获取分页列表数据
     *
     * @return 分页数据
     */
    Page<T> pages();

    /**
     * 根据查询实例条件获取分页列表数据
     *
     * @param example 查询实例
     * @return 分页数据
     */
    Page<T> pages(Example<T> example);

    /**
     * 逻辑删除数据
     *
     * @param entity 实体类对象
     */
    void logicDelete(T entity);

    /**
     * 根据主键ID逻辑删除数据
     *
     * @param id 主键ID
     */
    void logicDeleteById(ID id);

    /**
     * 根据主键ID列表逻辑删除数据
     *
     * @param ids 主键ID列表
     */
    void logicDeleteByIds(List<ID> ids);

    /**
     * 逻辑删除全部数据
     */
    void logicDeleteAll();

    /**
     * 逻辑删除列表数据
     *
     * @param entities 数据列表
     */
    void logicDeleteAll(Iterable<? extends T> entities);
}
